var map = new BMap.Map("map");  // 创建Map实例
var point = new BMap.Point(119.014521, 25.459865);// 初始化地图,用城市名设置地图中心点
map.centerAndZoom(point, 13);//
map.enableScrollWheelZoom();//地图可以缩放
map.enableContinuousZoom();

var blist = [];
var districtLoading = 0;
function getBoundary() {
    addDistrict("莆田市");
}
/**
 * 添加行政区划
 * @param {} districtName 行政区划名
 * @returns  无返回值
 */
function addDistrict(districtName) {
    //使用计数器来控制加载过程
    districtLoading++;
    var bdary = new BMap.Boundary();
    bdary.get(districtName, function (rs) {       //获取行政区域
        var count = rs.boundaries.length; //行政区域的点有多少个
        if (count === 0) {
            alert('未能获取当前输入行政区域');
            return;
        }
        for (var i = 0; i < count; i++) {
            blist.push({ points: rs.boundaries[i], name: districtName });
        };
        //加载完成区域点后计数器-1
        districtLoading--;
        if (districtLoading == 0) {
            //全加载完成后画端点
            drawBoundary();
        }
    });
}
function drawBoundary() {
    //包含所有区域的点数组
    var pointArray = [];
    var pNW = { lat: 59.0, lng: 73.0 };
    var pNE = { lat: 59.0, lng: 136.0 };
    var pSE = { lat: 3.0, lng: 136.0 };
    var pSW = { lat: 3.0, lng: 73.0 };
    var pArray = [];
    pArray.push(pNW);
    pArray.push(pSW);
    pArray.push(pSE);
    pArray.push(pNE);
    pArray.push(pNW);
    //循环添加各闭合区域
    for (var i = 0; i < blist.length; i++) {
        //添加显示用标签层
        var label = new BMap.Label(blist[i].name, { offset: new BMap.Size(20, -10) });
        label.hide();
        map.addOverlay(label);

        //添加多边形层并显示
        var ply = new BMap.Polygon(blist[i].points, { strokeWeight: 1, strokeColor: "#FF0000", fillOpacity: 0.01, fillColor: " #FFFFFF" }); //建立多边形覆盖物
        ply.name = blist[i].name;
        ply.label = label;
        map.addOverlay(ply);


        //将点增加到视野范围内
        var path = ply.getPath();
        pointArray = pointArray.concat(path);
        //将闭合区域加到遮蔽层上，每次添加完后要再加一次西北角作为下次添加的起点和最后一次的终点
        pArray = pArray.concat(path);
        pArray.push(pArray[0]);
    }

    // //限定显示区域，需要引用api库
    // var boundply = new BMap.Polygon(pointArray);
    // BMapLib.AreaRestriction.setBounds(map, boundply.getBounds());
    // map.setViewport(pointArray);    //调整视野

    //添加遮蔽层
    var plyall = new BMap.Polygon(pArray, { strokeOpacity: 0.0000001, strokeColor: "#000000", strokeWeight: 0.00001, fillColor: "#000000", fillOpacity: 0.8 }); //建立多边形覆盖物
    map.addOverlay(plyall);
}